package lib

// SetProfileReq 编辑个人信息的http请求格式, 前端不要在这里提供password的修改, password应当赋为null
type SetProfileReq struct {
	Token   string `json:"token"` // token一律暂时以当前用户的password代替, 以下的token不再赘述(token是为了保证操作由当前客户端做出, 防止被恶意攻击)
	Id      int64  `json:"id"`
	NewInfo User   `json:"new_info"` // 将用户填入的新个人信息打包成为UserJson对象发送
}

// SetProfileResp 返回编辑个人请求的响应格式
type SetProfileResp struct {
	StatusCode int    `json:"status_code"`
	StatusMsg  string `json:"status_msg"`
	NowInfo    User   `json:"now_info"` // 如果有一些信息用户没有填写，后端会自动生成一个默认字段返回，索引用户个人信息应当使用返回值更新
}

// 一下几个结构体定义了在添加好友的流程中需要用到的消息格式，无特殊说明均为websocket消息
// 在这里统一定义请求发送者为A，请求接收者为B，服务器为S

// AddFriendReq 添加好友请求的格式，发送给S
type AddFriendReq struct {
	Token      string    `json:"token"` // 该请求为http请求，也是整个添加好友的过程中唯一的http请求
	Sender     UserBrief `json:"sender"`
	ReceiverId int64     `json:"receiver_id"`
	Brief      string    `json:"brief"` // 申请添加好友的介绍信息
}

// AddFriendResp 添加好友请求的响应格式，由S发送给A，仅用以当作http请求的响应
type AddFriendResp struct {
	StatusCode int    `json:"status_code"`
	StatusMsg  string `json:"status_msg"`
}

// GetFriendReqMsg S向B发送的消息，告知B接收到了来自A的好友请求，并展示相关信息
type GetFriendReqMsg struct {
	Sender UserBrief `json:"sender"`
	Brief  string    `json:"brief"`
	SelfId int64     `json:"self_id"`
	Type   string    `json:"type"` // "add_friend"
}

// CheckFriendMsg 重点注意!!! 该条信息的json键需要使用驼峰命名法才能被服务器正常识别!!!
// CheckFriendMsg 由B发送给S的消息，用以告知服务器B是否接受了A的好友请求
type CheckFriendMsg struct {
	IsAcceptedCode int       `json:"isAcceptedCode"` // 1代表好友建立被拒绝，2代表好友建立成功
	Self           UserBrief `json:"self"`
	TheOther       UserBrief `json:"theOther"`
	Type           string    `json:"type"` //"add_friend_fail_or_success"
}

// AddFriendFailOrSuccess 由服务器发送给A与B的消息，用以单独通知A好友请求被拒绝，或者告知A与B好友已经建立成功
type AddFriendFailOrSuccess struct {
	Message  string    `json:"message"`
	Type     string    `json:"type"` // "add_friend_fail_or_success"
	TheOther UserBrief `json:"the_other"`
}

type PullFrdReqQueue struct {
	Type     string            `json:"type"`
	SumNum   int               `json:"sum_num"`
	ReqQueue []GetFriendReqMsg `json:"req_queue"` // "pull_friend_req"
}

// SearchFriendReq 搜索好友请求的格式
type SearchFriendReq struct {
	SearchTypeCode int    `json:"search_type_code"` // 1为id搜索，2为username搜索
	Id             int64  `json:"id"`
	Username       string `json:"username"`
	SelfId         int64  `json:"self_id"`
	Token          string `json:"token"`
}

// SearchFriendResp 搜索好友请求的响应格式
type SearchFriendResp struct {
	StatusCode   int    `json:"status_code"` // 0代表服务器错误，1代表未查询到对应user信息，2代表查询成功
	StatusMsg    string `json:"status_msg"`
	User         User   `json:"user"`
	IsFriendCode int    `json:"is_friend_code"` // 1代表你们已经是好友，0代表你们还不是好友
}

type GetProfileReq struct {
	Id       int64  `json:"id"`
	Username string `json:"username"`
	Token    string `json:"token"`
}

type GetProfileResp struct {
	StatusCode int    `json:"status_code"`
	StatusMsg  string `json:"status_msg"`
	User       User   `json:"user"`
}

type GetFrdListReq struct {
	Id    int64  `json:"id"`
	Token string `json:"token"`
}

type GetFrdListResp struct {
	StatusCode int         `json:"status_code"`
	StatusMsg  string      `json:"status_msg"`
	SumNum     int         `json:"sum_num"`
	Friends    []UserBrief `json:"friends"`
}

type DeleteFrdReq struct {
	Id         int64  `json:"id"`
	Token      string `json:"token"`
	TheOtherId int64  `json:"the_other_id"`
}

type DeleteFrdResp struct {
	StatusCode int    `json:"status_code"`
	StatusMsg  string `json:"status_msg"`
}
